dofile "lib/radical.lua" 

function tile(s) 
  return const.path.gfx.."game/subway/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."1-deadhour/subway/"..s..".xml";
end

subway = engine.state {
   _drug        = false --A man in a subway needs a drug
  ,_help        = false --Kate helper a man in subway
  ,_talk        = false --Kate talked with a man
  ,_leave       = false --Man told Kate how to get home
  ,_coin        = false --Kate gave coin to a man
}

subway_player = musplayer.player {
   sfx("escalator2"):inside("escalator_up1"):always():loop(1)
  ,sfx("escalator2"):inside("escalator_down1"):always()
  ,mute():fade(3000,3000):inside("slidetrain")
  
  ,sfx("train_arrive"):inside("exit_scene2")
  ,mute():fade(3000,3000):inside("exit_scene4")
  ,sfx("train"):inside("travel1")
}

main = engine.main {
   start        = chain_ {
                     episode_("1-subway")
                    ,musplayer_("subway_player")
                    ,take_("painkiller")
                    ,walk_("start1")
                  }
  ,finish       = gamefile_("1-deadhour/night.lua")
}

painkiller = item {
   nam          = "Таблетки ультвазина"
  ,img          = ico "drug-use"
  ,ico          = ico "drug"
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["man"] = 
                      choose_ {
                         ["default"] = "Лучше бы сначала узнать, что с ним."
                        ,["subway._drug"] = chain_ { set_("subway._help"), walk_("man_dlg") }
                      }
                  }
}

start1 = cutscene {
   tile         = tile "edge"
  ,dsc          = [[Катя ждала поезда довольно долго -- часы над тоннелем успели несколько раз отсчитать десять минут и сброситься в ноль. 
                    Кате уже начинало казаться, что по всей этой ветке перестали ходить поезда, что во всем городе отключили ток, и единственное,
                    что еще работает -- это зациклившиеся цифровые часы над тоннелем, невозмутимо отсчитывающие свои десять минут, и несколько
                    газовых ламп на потолке, заливающих всю станцию желтоватым пыльным светом.
                  ]]
  ,next         = "start2"
}

start2 = cutscene {
   tile         = tile "edge"
  ,dsc          = [[Кроме Кати, на станции было еще несколько человек. Некоторые ушли, так и не дождавшись поезда, но Катя не знала, как еще она
                    может добраться домой.^^
                    Часы над тоннелем показывали 6:57 -- уже в четвертый раз.
                  ]]
  ,next         = "station1"
}

look = staticitem {
   dsc          = "^^Катя время от времени {поглядывает} в чернный тоннель, надеясь увидеть огни приближающегося поезда."
  ,act          = "Нет, ничего не видно. Поезда по-прежнему нет."
}

station1 = scene {
   tile         = tile "column1"
  ,bounds       = { 180, nil, 670 }
  ,dsc          = [[Это длинный пропахший сыростью бетонный коридор больше похож на заброшенное бомбоубежище, чем на станцию метро. Кажется, что 
                    ты на глубине в несколько километров под землей.]]
  ,alwaysdsc    = true
  ,obj          = { "station1_paper", "look" }
  ,nav          = {
                     up = vw("В конец станции", "station2")
                  }
}

station1_paper = staticitem {
   dsc          = "На стене висит пожелтевшее от старости {объявление}."
  ,act          = walk_("station1_paper_scene")
  ,showonce     = true
}

station1_paper_scene = scene {
   bounds       = { 300, 120, 400 }
  ,dsc          = [[ВНИМАНИЕ! ВАЖНО!^^
                    Начиная с 21-30 движение поездов по этой ветке ограничено. Выбирайте другой маршрут для объезда. Помните, что с 21-30 интервалы
                    между поездами могут достигать получаса. В 21-45 закрывается пересадочный переходом на Мещерской станции, в 22-00 закрывается 
                    сама Мещерская станция, в 22-30 закрываются все станции метров, и движение поездов прекращается. Данный график работы метро был
                    принят 12 сентября 2003 года, согласно положению ст. 14-А об изменении процедуры комендантского часа. Начиная с 21-30 рекомендуем
                    вам пользоваться другими видами транспорта.^^
                    Обо всех нарушениях комендантского часа, а также о подозрительных лицах на станции сообщайте в бюро статистического контроля по
                    тел. 402-112. Помните, все эти меры были приняты для того, чтобы обеспечить вашу безопасность. Нарушение комендантского часа 
                    является тяжким уголовным преступлением, которое карается по ст. 204 уголовного кодекса.
                  ]]
  ,nav          = {
                    down = vw("Отойти", "station1")
                  }
}

station2 = scene {
   tile         = { tile "column2", 578, 40 }
  ,bounds       = { nil, nil, 550 }
  ,dsc          = [[Кажется, людей на перроне почти не осталось. Как будто все уже знают о том, что поезд никогда не придет на эту станцию, и лишь
                    Катя продолжает что-то безнадежно ждать.]]
  ,obj          = { "man", "look" }
  ,nav          = {
                     up = vw("В конец станции", "station3")
                    ,down = vw("В начало станции", "station1")
                  }
}

man = staticitem {
   dsc          = choose_ {
                     ["default"] = "На скамейке сидит, ссутулившись, {мужчина} в грязной спецовке. Время от времени он вздрагивает и хватается руками за голову. Кажется, ему плохо."
                    ,["subway._help and not subway._coin"] = "На скамейке сидит, ссутулившись, {мужчина} в грязной спецовке."
                    ,["subway._coin"] = "Просевшая деревянная скамейка, изрезанная какими-то мерзкими рисунками и надписями, пустует. Никто, кроме Кати, уже не ждет поезда."
                  }
  ,act          = walk_("man_dlg")
}

man_dlg = dialog {
   tile         = { tile "column2", 578, 40 }
  ,bounds       = { nil, nil, 550 }
  ,dsc          = choose_ {
                     ["default"] = "Мужчина даже не поднимает головы."
                    ,["subway._help"] = "Глаза у мужчины влажные, как у старика, хотя на вид ему лет сорок, не больше."
                  }
  ,dlg          = dxml "man"
}

station3 = scene {
   tile         = tile "column1"
  ,bounds       = { 180, nil, 670 }
  ,dsc          = [[Здесь станция заканчивается. Перед Катей лишь закрытая дверь в какое-то техническое помещение и старый таксофон.]]
  ,alwaysdsc    = true
  ,obj          = { "look" }
  ,nav          = {
                     up = vw("К выходу со станции", "escalator")
                    ,down = vw("В начало станции", "station2")
                  }
}

escalator = scene {
   tile         = { tile "column3", 0, 20 }
  ,bounds       = { 120, 220, 700 }
  ,dsc          = [[Работающий эскалатор впереди издает какой-то неприятный надрывный шум, как будто весь его механизм страшно
                    изношен, и дрожащие при движении ступеньки тут провалятся, стоит лишь ступить на них ногой.]]
  ,alwaysdsc    = true
  ,nav          = {
                     up = vw("Подняться наверх", "escalator_up1")
                    ,down = vw("На станцию", "station3")
                  }
}

escalator_up1 = pause {
   time         = 500
  ,next         = "escalator_up2"
}
escalator_up2 = slidedown {
   fps          = 20
  ,step         = 3
  ,y            = 0
  ,tile         = tile "escalator"
  ,next         = "escalator_up3"
}
escalator_up3 = pause {
   time         = 2000
  ,next         = "exit"
}

escalator_down1 = pause {
   time         = 500
  ,next         = "escalator_down2"
}
escalator_down2 = slideup {
   fps          = 20
  ,step         = 3
  ,y            = 0
  ,tile         = tile "escalator"
  ,next         = "escalator_down3"
}
escalator_down3 = pause {
   time         = 2000
  ,next         = "escalator"
}

exit = scene {
   tile         = { tile "column3", 0, 20 }
  ,bounds       = { 120, 220, 700 }
  ,dsc          = "Впереди -- турникеты и выход со станции. Справа, у стены, стоят разменные автоматы."
  ,alwaysdsc    = true
  ,nav          = {
                     up = vw("Выйти наружу", "exit_scene1"):cnd("subway._leave", "И куда Катя пойдет? Она понятия не имеет, как можно доехать до дома, кроме как на метро.")
                    ,down = vw("На станцию", "escalator_down1")
                    ,right = vw("К разменным автоматам", "machines")
                  }
}

machines = scene {
   tile         = { tile "column3", 0, 20 }
  ,bounds       = { 120, 220, 700 }
  ,obj          = { "coin" }
  ,dsc          = "Это старые автоматы для размена монет -- на проезд и на телефон."
  ,alwaysdsc    = true
  ,nav          = {
                    down = vw("Отойти", "exit")
                  }
}

coin = item {
   nam          = "Монета для таксофона"
  ,dsc          = "Под одним из автоматов {что-то} блестит."
  ,tak          = "Это оказалась монетка -- как раз для таксофона. Кто-то, видимо, обронил ее."
  ,img          = ico "coin-use"
  ,ico          = ico "coin"
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["man"] = chain_ { set_("subway._coin"), walk_("man_dlg") }
                  }
}

exit_scene1 = pause {
   time         = 3100
  ,enter        = drop_("coin")
  ,next         = "exit_scene2"
}

exit_scene2 = pause {
   time         = 1500
  ,next         = "exit_scene3"
}

exit_scene3 = cutscene {
   bounds       = { 220, 240, 600 }
  ,dsc          = [[Катя уже подходила к турникетам, как вдруг со станции стал доноситься хорошо знакомый шум прибывающего поезда.
                    В первую секунду Кате даже показался, что этот звук ей лишь послышался, но он продолжал усиливаться с каждой
                    секундой, и Катя побежала вниз по эскалатору.]]
  ,next         = "slidetrain"
}

slidetrain = slideright {
   fps          = 20
  ,step         = 5
  ,x            = -510
  ,y            = 70
  ,endx         = 0
  ,tile         = tile "train"
  ,next         = "exit_scene4"
}

exit_scene4 = cutscene {
   tile         = tile "train"
  ,bounds       = { nil, nil, 900 }
  ,dsc          = [[Когда Катя спустилась на станцию, поезд, абсолютно пустой, уже стоял на перроне, в нужном ей направлении, точно
                    терпеливо ее поджидая.^Катя облегченно вздохнула -- наконец-то она уедет домой.]]
  ,next         = "travel1"
}

function travel(next)
  return engine.gameroom {
     fps        = 20
    ,clean      = function(s)
                    drawing.clean(s.pic, 400, 0, 507, 510);
                  end
    ,ontimer    = function(s,x,y)
                    if s.frameno == nil then
                      s.frameno = 1;
                    end
                    if s.frameno >= 40 then
                      local disc = 10;
                      if s.frameno % disc == 0 then
                        local fn = s.frameno/disc;
                        if fn % 2 == 0 then
                          if s.wasx == nil then
                            s.wasx = 7;
                          end
                          if s.wasx < 1 then
                            s.wasx = nil;
                            s.frameno = nil;
                            walk(next);
                            return;
                          end
                          local spr = sprite.load(tile("tonnel"..tostring(s.wasx)));
                          local y = 20;
                          s:clean();
                          sprite.copy(spr, s.pic, const.picwidth-sprite.size(spr), y);
                          sprite.free(spr);
                          s.wasx = s.wasx-1;
                        else
                          s:clean();
                        end
                      end
                    end
                    s.frameno = s.frameno + 1;
                  end
  }
end

travel1 = travel("travel2")

travel2 = pause {
   time         = 3000
  ,next         = "travel3"
}

travel3 = cutscene {
   bounds       = { 260, 260, 500 }
  ,dsc          = [[Катя доехала до станции Великого Октября незадолго до того, как начало закрываться метро. Когда она уже подходила к своему 
                    дому, было 11 часов вечера. Начался комендантский час.]]
  ,next         = "main"
}